package com.kexio.file.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kexio.file.entity.FileVersion;

/**
 * 文件版本 - 数据访问层
 * 
 * @author Kexio Team  
 * @since 1.0.0
 */
@Mapper
public interface FileVersionMapper extends BaseMapper<FileVersion> {

    /**
     * 根据文件ID查询所有版本
     *
     * @param fileId 文件ID
     * @return 版本列表
     */
    List<FileVersion> selectVersionsByFileId(@Param("fileId") String fileId);

    /**
     * 根据文件ID查询当前版本
     *
     * @param fileId 文件ID
     * @return 当前版本
     */
    FileVersion selectCurrentVersionByFileId(@Param("fileId") String fileId);

    /**
     * 根据文件ID查询最大版本号
     *
     * @param fileId 文件ID
     * @return 最大版本号
     */
    Integer selectMaxVersionNumberByFileId(@Param("fileId") String fileId);

    /**
     * 根据文件ID和版本号查询版本
     *
     * @param fileId 文件ID
     * @param versionNumber 版本号
     * @return 文件版本
     */
    FileVersion selectVersionByFileIdAndNumber(@Param("fileId") String fileId, 
                                               @Param("versionNumber") Integer versionNumber);

    /**
     * 设置指定版本为当前版本（同时将其他版本设为非当前）
     *
     * @param fileId 文件ID
     * @param versionId 版本ID
     * @return 影响行数
     */
    int updateCurrentVersion(@Param("fileId") String fileId, @Param("versionId") String versionId);

    /**
     * 根据存储对象ID查询关联的版本数量
     *
     * @param storageObjectId 存储对象ID
     * @return 关联版本数量
     */
    int countByStorageObjectId(@Param("storageObjectId") String storageObjectId);

    /**
     * 根据文件ID删除所有版本（软删除）
     *
     * @param fileId 文件ID
     * @return 影响行数
     */
    int deleteVersionsByFileId(@Param("fileId") String fileId);

    /**
     * 根据文件ID统计版本数量
     *
     * @param fileId 文件ID
     * @return 版本数量
     */
    int countVersionsByFileId(@Param("fileId") String fileId);

    /**
     * 批量查询文件的版本数量
     *
     * @param fileIds 文件ID列表
     * @return 文件ID与版本数量的映射
     */
    List<FileVersion> selectVersionCountsByFileIds(@Param("fileIds") List<String> fileIds);
}
